package com.example;

// 测试“重写私有方法”陷阱
public class TestPrivateMethodOverrideTrap {
    public static class Parent{
        private void privateFun(){
            System.out.println("Parent.privateFun() is running.");
        }

        public static void main(String[] args) {
            Parent parent = new Son();
            parent.privateFun(); // Parent.privateFun() is running.
        }
    }

    public static class Son extends Parent{
        // 只有非private的方法可以被重写，但要注意重写private方法的假象，
        // 它不会产生编译器警告，但也不会执行你可能期望的操作。为了淸楚起见，请在子类中使用与基类private方法不同的名称。
        // 为了避免出现这种问题，建议子类中重写某个父类的方法是加上@Override注解，
        // 当子类试图不正确地重写父类的方法时，@Override可以把问题检测出来。
        // @Override // 如果加了这个注解，编译时就会报错，从而避免无意中陷入试图重写父类的private方法的陷阱
        private void privateFun(){
            System.out.println("Son.privateFun() is running.");
        }
    }
}
